﻿using System;

namespace _06.枚举
{
    class Program
    {
        public enum sex //性别
        {
            //这里写每一个枚举项，必须是不重名的字符串，他是从0开始
            Man = 5,//男人
            Woman = 8,//女人
            Ohters = 200 //其他
        }
        static void Main(string[] args)
        {
            //枚举：枚 量词，比如：一枚硬币 ，两枚硬币，三枚硬币。记数性质，是一种整形性质。
            //举：列举、举例，展示给别人看
            //用于方便计数，整形性质给别人看到一种类型
            //好处：写一次就好下次用直接点出来，对相同类型的数据进行分组整理，记录了整形数值
            //关键字：enum
            Console.WriteLine(sex.Ohters);
            Console.WriteLine(sex.Woman);
            Console.WriteLine((int)sex.Man);//转换成枚举对应的数 5.
            Console.WriteLine(Convert.ToInt32(sex.Ohters));//也可以用convert来转

            #region 类型转换

            //枚举的类型转换：int 可以强转 枚举，string 不能强转
            Console.WriteLine("---------------- 类型转换 ---------");
            Console.WriteLine((sex)5);
            Console.WriteLine((sex)8);
            Console.WriteLine((sex)200);


            //Console.WriteLine((sex)"Man"); 
            // string 转 枚举要用到 Enum 类 的 Parse 方法，但是只能转 string ，转 int 还得看上面
           //Enum   Parse   typeof 
            sex p2 = (sex)Enum.Parse(typeof(sex), "Man");
            if (p2 == sex.Man)
            {
                Console.WriteLine($"转换 {sex.Man} 成功");
            }

            Console.WriteLine("---------------- 类型转换 ---------");
            #endregion

            #region 判定是否已经定义了某个枚举项

            // 判定 int 是否在 枚举里面有定义
            bool exist = Enum.IsDefined(typeof(sex), 8); //exist 存在 is 是否，反问，    Defined 定义   isDefind 是否定义了
            //Isdefined
            Console.WriteLine(exist ? "存在" : "不存在");

            for (int i = 0; i < 201; i++)
            {
                var exit = Enum.IsDefined(typeof(sex), i);
                if (exit)
                {
                    var p3 = (sex)i;
                    Console.WriteLine($"存在定义：{i} - { p3}");
                }
            }

            // 判定 string 是否在枚举中有定义
            exist = Enum.IsDefined(typeof(sex), "Man"); //exist 存在 is 是否，反问，Defined 定义 isDefind 是否定义了
            Console.WriteLine(exist ? "存在" : "不存在");

            var arr = new string[5] { "AAA", "Man", "Ohters", "Woman0", "Woman" };


            for (int i = 0; i < arr.Length; i++)
            {
                var exit = Enum.IsDefined(typeof(sex), arr[i]);
                if (exit)
                {
                    var p3 = Enum.Parse(typeof(sex), arr[i]);
                    Console.WriteLine($"存在定义：{i} - { p3}");
                }
            }



            #endregion
        }
    }
}
